catkin_make ERROR

catkin_make ERROR:
编写完节点源代码后,catkin-make编译包时出现的错误分析。

CMakelist.txt参数

project()

包的名字,根据catkin_create_pkg后面的名字命名。注意需要与后面的参数对准。

find_package()

编译包需要的依赖项。可以自己添加。格式为:

1
2
3
4
5
find_package(catkin REQUIRED COMPONENTS //必须的
x //根据自己编写的源代码需要的依赖项
y
z
)

include_directories()

如果包有头文件,需要注意该选项。格式为:

1
2
3
include_directories(
include ${catkin_INCLUDE_DIRS}
)

add_executable()

指定编译的文件,以及要生成的可执行文件,即节点。需要注意的是,自动生成的CMakelist文件中,会自动把节点和源文件等命名为xxx_node的格式,需要修改。

1
2
add_executable(${PROJECT_NAME}_node src/mynode_node.cpp) //自动生成的
add_executable(${PROJECT_NAME} src/main.cpp src/file1.cpp src/file2.cpp) //正确编译的

将调用src/main.cpp,src/file1.cpp和src/file2.cpp生成名为myNode的目标可执行文件

指定生成的可执行文件需要链接的库文件。格式为:

1
2
3
target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
)

错误1:Undefined reference to ‘’ros::init()’’

出现该编译错误的原因很可能是

  • 头文件问题
  • CMakelist.txt问题

头文件问题

检查包含的头文件,有可能写错。

CMakelist.txt问题

主要检查以下几个方面:project名字,依赖包是否完整,头文件夹是否包含,

文章目录
  1. 1. CMakelist.txt参数
    1. 1.1. project()
    2. 1.2. find_package()
    3. 1.3. include_directories()
    4. 1.4. add_executable()
    5. 1.5. target_link_libraries()
  2. 2. 错误1:Undefined reference to ‘’ros::init()’’
    1. 2.1. 头文件问题
    2. 2.2. CMakelist.txt问题
,